ZeroMQ সকার কনফিগারেশনের জন্য বিভিন্ন ধরনের সকার অপশন (Socket Options) রয়েছে, যা মেসেজ পাসিংয়ের সময় সকারের আচরণ এবং কার্যকারিতা নির্ধারণ করতে ব্যবহৃত হয়। এই অপশনগুলো সকারের কার্যক্ষমতা, সময়সীমা, ব্যাকলগ, এবং অন্যান্য বৈশিষ্ট্য নিয়ন্ত্রণ করতে সহায়ক। ZeroMQ সকার অপশন এবং কনফিগারেশন ব্যবহার করে আপনি মেসেজিং সিস্টেমটিকে আপনার প্রয়োজন অনুযায়ী কাস্টমাইজ করতে পারেন।
ZeroMQ Socket Options-এর প্রকারভেদ
ZeroMQ সকারের জন্য বিভিন্ন অপশন রয়েছে, যা সকারের আচরণ কাস্টমাইজ করার জন্য ব্যবহৃত হয়। নিচে কিছু গুরুত্বপূর্ণ সকার অপশন এবং তাদের ব্যবহার ব্যাখ্যা করা হলো:
১. ZMQ_LINGER
বর্ণনা: ZMQ_LINGER অপশন সকার বন্ধ করার সময় কতক্ষণ মেসেজগুলো পেন্ডিং থাকবে তা নির্ধারণ করে। এটি মূলত মেসেজ ডেলিভারির জন্য সকার বন্ধ করার সময় পর্যন্ত অপেক্ষা করবে।
ডিফল্ট মান: -1 (অনির্দিষ্ট সময় পর্যন্ত অপেক্ষা করে)
ব্যবহার:
0: সকার বন্ধ করার সময় কোন মেসেজ পেন্ডিং থাকলে তা ড্রপ করা হবে।>0: নির্দিষ্ট মাইক্রোসেকেন্ড সময় পর্যন্ত অপেক্ষা করবে।
উদাহরণ (Python):
socket.setsockopt(zmq.LINGER, 0) # সকার বন্ধ করার সময় পেন্ডিং মেসেজ ড্রপ করবে
২. ZMQ_RCVTIMEO এবং ZMQ_SNDTIMEO
বর্ণনা:
- ZMQ_RCVTIMEO: এই অপশনটি সকারে মেসেজ গ্রহণ করার জন্য একটি সময়সীমা সেট করে। যদি নির্ধারিত সময়ের মধ্যে মেসেজ না আসে, তবে এটি টাইমআউট করে।
- ZMQ_SNDTIMEO: এটি মেসেজ পাঠানোর জন্য সময়সীমা নির্ধারণ করে। নির্ধারিত সময়ে মেসেজ পাঠাতে ব্যর্থ হলে এটি টাইমআউট করে।
ডিফল্ট মান: -1 (কোনও সময়সীমা নেই)
ব্যবহার:
>0: নির্দিষ্ট মাইক্রোসেকেন্ড সময় পর্যন্ত অপেক্ষা করবে।0: অবিলম্বে টাইমআউট করবে যদি মেসেজ পাঠানো বা গ্রহণ করা সম্ভব না হয়।
উদাহরণ (Python):
socket.setsockopt(zmq.RCVTIMEO, 5000) # ৫ সেকেন্ড অপেক্ষা করবে মেসেজ গ্রহণের জন্য
socket.setsockopt(zmq.SNDTIMEO, 3000) # ৩ সেকেন্ড অপেক্ষা করবে মেসেজ পাঠানোর জন্য
৩. ZMQ_SUBSCRIBE এবং ZMQ_UNSUBSCRIBE (PUB-SUB সকারের জন্য)
বর্ণনা:
- ZMQ_SUBSCRIBE: PUB-SUB প্যাটার্নে SUB সকারের জন্য নির্দিষ্ট টপিক সাবস্ক্রাইব করার জন্য ব্যবহৃত হয়। এটি নির্দিষ্ট টপিকের মেসেজ গ্রহণ করবে।
- ZMQ_UNSUBSCRIBE: একটি সাবস্ক্রাইব করা টপিক আনসাবস্ক্রাইব করতে ব্যবহৃত হয়।
ব্যবহার:
"topic_name": নির্দিষ্ট একটি টপিকের জন্য সাবস্ক্রাইব করা হবে।"": সমস্ত টপিকের জন্য সাবস্ক্রাইব করা (ডিফল্ট)।
উদাহরণ (Python):
socket.setsockopt_string(zmq.SUBSCRIBE, "news") # "news" টপিকের মেসেজ সাবস্ক্রাইব করা
socket.setsockopt_string(zmq.UNSUBSCRIBE, "sports") # "sports" টপিক আনসাবস্ক্রাইব করা
৪. ZMQ_SNDHWM এবং ZMQ_RCVHWM
বর্ণনা:
- ZMQ_SNDHWM: সকারে মেসেজ পাঠানোর জন্য হাই-ওয়াটার মার্ক (HWM) সেট করা হয়। এটি সকারে মেসেজ পাঠানোর সময় কতগুলো মেসেজ পেন্ডিং থাকবে তা নির্ধারণ করে।
- ZMQ_RCVHWM: সকারে মেসেজ গ্রহণের জন্য HWM সেট করে। এটি সকারে মেসেজ গ্রহণ করার সময় কতগুলো মেসেজ পেন্ডিং থাকবে তা নির্ধারণ করে।
ডিফল্ট মান: 1000
ব্যবহার:
- এই মান বাড়িয়ে দিলে সকারে বেশি মেসেজ পেন্ডিং থাকতে পারে এবং কমিয়ে দিলে কম মেসেজ পেন্ডিং থাকবে।
উদাহরণ (Python):
socket.setsockopt(zmq.SNDHWM, 2000) # ২০০০ মেসেজ পর্যন্ত পেন্ডিং থাকতে পারবে
socket.setsockopt(zmq.RCVHWM, 1500) # ১৫০০ মেসেজ পর্যন্ত পেন্ডিং থাকতে পারবে
৫. ZMQ_BACKLOG
বর্ণনা: ZMQ_BACKLOG অপশনটি সংযোগের সময় কতগুলো পেন্ডিং কানেকশন সার্ভারের জন্য কিউতে থাকবে তা নির্ধারণ করে।
ডিফল্ট মান: 100
ব্যবহার:
- সার্ভার সকারে অতিরিক্ত লোড বা অতিরিক্ত সংযোগ থাকলে এটি ব্যাকলগ কন্ট্রোল করতে ব্যবহার করা হয়।
- মান বাড়িয়ে দিলে সার্ভার অতিরিক্ত সংযোগ গ্রহণ করতে সক্ষম হয়।
উদাহরণ (Python):
socket.setsockopt(zmq.BACKLOG, 200) # সার্ভার ২০০ পেন্ডিং সংযোগ অনুমোদন করবে
৬. ZMQ_IPV6
বর্ণনা: ZeroMQ-তে IPv6 সমর্থন সক্ষম বা নিষ্ক্রিয় করতে ZMQ_IPV6 অপশন ব্যবহার করা হয়।
ডিফল্ট মান: 0 (IPv4)
ব্যবহার:
0: IPv4 ব্যবহৃত হবে।1: IPv6 ব্যবহৃত হবে।
উদাহরণ (Python):
socket.setsockopt(zmq.IPV6, 1) # IPv6 সক্ষম করা
৭. ZMQ_RECONNECT_IVL এবং ZMQ_RECONNECT_IVL_MAX
বর্ণনা:
- ZMQ_RECONNECT_IVL: এটি একটি সকারের পুনরায় সংযোগের সময় ইন্টারভাল সেট করে। সংযোগ বিচ্ছিন্ন হলে পুনরায় সংযোগের আগে কত সময় অপেক্ষা করবে তা নির্ধারণ করে।
- ZMQ_RECONNECT_IVL_MAX: পুনরায় সংযোগের জন্য সর্বোচ্চ ইন্টারভাল সেট করে। এটি পুনরায় সংযোগের সময় একটি র্যান্ডম ইন্টারভাল যোগ করে সংযোগের চেষ্টা করে।
উদাহরণ (Python):
socket.setsockopt(zmq.RECONNECT_IVL, 1000) # সংযোগ বিচ্ছিন্ন হলে ১ সেকেন্ড অপেক্ষা করবে
socket.setsockopt(zmq.RECONNECT_IVL_MAX, 5000) # সর্বোচ্চ ৫ সেকেন্ড পর্যন্ত ইন্টারভাল থাকবে
৮. ZMQ_IMMEDIATE
বর্ণনা: ZMQ_IMMEDIATE অপশনটি সেট করলে ক্লায়েন্ট সকার তৈরি হওয়ার সাথে সাথে সংযোগ চেক করে। যদি সংযোগ ব্যর্থ হয়, তবে মেসেজ পাঠানোর পরিবর্তে ত্রুটি ফেরত দেয়।
ব্যবহার:
0: ক্লায়েন্ট মেসেজ পাঠানোর চেষ্টা করবে, সংযোগ না থাকলেও।1: সংযোগ চেক করবে, সংযোগ না থাকলে ত্রুটি দেবে।
উদাহরণ (Python):
socket.setsockopt(zmq.IMMEDIATE, 1) # সংযোগ চেক করে ত্রুটি দেবে
উপসংহার
ZeroMQ সকার অপশন এবং কনফিগারেশন ব্যবহার করে আপনি মেসেজিং সিস্টেমের কার্যকারিতা এবং কর্মক্ষমতা নিয়ন্ত্রণ করতে পারেন। ZMQ_LINGER, ZMQ_RCVTIMEO, ZMQ_SNDTIMEO, ZMQ_SUBSCRIBE ইত্যাদি অপশন ব্যবহার করে সঠিকভাবে ZeroMQ সকার কনফিগার করা যায় এবং বিভিন্ন পরিস্থিতিতে মেসেজিং সিস্টেমকে কাস্টমাইজ করা যায়। এই অপশনগুলো ব্যবহার করে আপনি সকারের টাইমআউট, লোড ম্যানেজমেন্ট, এবং পুনরায় সংযোগ ইন্টারভাল সেট করতে পারেন, যা আপনাকে একটি নির্ভরযোগ্য এবং কার্যকরী মেসেজিং সিস্টেম তৈরি করতে সহায়ক।
Read more